Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/面试/面经

13 腾讯-一面-腾讯金融科技

1 分钟阅读 · Note

目录树 578 篇

          • 0 面试技巧&HR面⬇️
          • 1磐松资产-前端实习-一面
          • 2字节跳动-豆包前端实习-全部
          • 3百度-前端实习面试-一面
          • 5光庭-前端实习-一面
          • 6懂车帝-前端实习-一面
          • 7字节-抖音团购-全部
          • 8腾讯-前端-全部
          • 9字节&美团-笔试
          • 10 美团-一面
          • 11 B站-一面
          • 12 腾讯-一面-企业微信团队
          • 13 腾讯-一面-腾讯金融科技
          • 14 腾讯-二面-腾讯金融科技
          • 15 美团-一面-核心本地商业
          • 16 斑马智行-全部
          • 17 字节-一面-飞书
          • 18 美团-二面-核心本地商业
          • 19 心影随形-全部
          • 20 thunderbit-全部
          • 21 converge ai-全部
          • 22 字节-国际化广告创意与品牌
        • 可投递企业
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗0 面试技巧&HR面⬇️同一路径↗10 美团-一面同一路径↗11 B站-一面同一路径↗12 腾讯-一面-企业微信团队同一路径↗14 腾讯-二面-腾讯金融科技同一路径↗15 美团-一面-核心本地商业同一路径
  • 13 腾讯-一面-腾讯金融科技

13 腾讯-一面-腾讯金融科技

> Last Format Time:6/12/2026 21:03:57

提问

大量的提问有关Agent

  • 如何验证最后的结果
  • 怎么优化写文档的过程呢
  • react的原理
  • fiber架构
  • 打包工具的原理
  • vite与wpck区别
  • 热更新原理

代码

题目

// 异步加法
function asyncAdd(a, b, cb) {
    setTimeout(() => {
        cb(null, a + b)
    }, Math.random() * 1000)
}

async function total() {
    const res1 = await sum(1, 3, 5, 7, 9, 1, 3, 5, 7, 9);
    const res2 = await sum(1, 3, 5, 7, 9, 1, 3, 5, 7, 9);
    console.log([res1, res2])
    return [res1, res2]
}
total()

async function sum(...args) {
    // TODO 实现下 sum 函数。注意不能使用加法,在 sum 中借助 asyncAdd 完成加法。尽可能的优化这个方法的时间。
}

我的实现

// 异步加法
function asyncAdd(a, b, cb) {
    setTimeout(() => {
        cb(null, a + b)
    }, Math.random() * 1000)
}

async function total() {
    const res1 = await sum(1, 3, 5, 7, 9, 1, 3, 5, 7, 9);
    const res2 = await sum(1, 3, 5, 7, 9, 1, 3, 5, 7, 9);
    console.log([res1, res2])
    return [res1, res2]
}

total()

const promisedAdd = (a, b) => {
    let promise = new Promise((resolve, reject) => {
        const fn = (arg1, sum) => {
            resolve(sum)
            // reject(arg1)
        }
        let res = asyncAdd(a, b, fn)
    }).then((sum) => {
        return sum
    }).finally(() => {
        return null
    })
    return promise
}

async function sum(...args) {
    // TODO 实现下 sum 函数。注意不能使用加法,在 sum 中借助 asyncAdd 完成加法。尽可能的优化这个方法的时间。
    let n = args.length
    let ans = 0
    if (n === 0) {
        return 0
    }

    let arr = args.slice()
    // let promises = []
    let promise = new Promise(async (resolve, reject) => {
        for (let i = 0; i < n; i++) {
            ans  = await promisedAdd(ans, arr[i])
        }
        resolve(ans)
    }).then((ans) => {
        return ans
    })
    return promise
}

标准实现

// 异步加法
function asyncAdd(a, b, cb) {
    setTimeout(() => {
        cb(null, a + b)
    }, Math.random() * 1000)
}

async function total() {
    const res1 = await sum(1, 3, 5, 7, 9, 1, 3, 5, 7, 9);
    const res2 = await sum(1, 3, 5, 7, 9, 1, 3, 5, 7, 9);
    console.log([res1, res2])
    return [res1, res2]
}
total()

// 实现 sum 函数
async function sum(...args) {
    // 边界条件:没有参数返回0,只有一个参数直接返回该参数
    if (args.length === 0) return 0;
    if (args.length === 1) return args[0];
    
    // 边界条件:如果只有两个参数,直接调用 asyncAdd 相加
    if (args.length === 2) {
        return new Promise((resolve) => {
            asyncAdd(args[0], args[1], (_, res) => resolve(res));
        });
    }

    // 二分法:将数组从中间劈开,分成左右两部分
    const mid = Math.floor(args.length / 2);
    const leftArgs = args.slice(0, mid);
    const rightArgs = args.slice(mid);

    // 并行计算左右两部分的和(递归调用)
    // Promise.all 会让左右两边的计算同时开始,而不是等左边算完再算右边
    const [leftSum, rightSum] = await Promise.all([
        sum(...leftArgs),
        sum(...rightArgs)
    ]);

    // 最后将左右两边的结果相加
    return new Promise((resolve) => {
        asyncAdd(leftSum, rightSum, (_, res) => resolve(res));
    });
}

反思

完蛋。。。

并非完蛋,上一个面试官给我很高的评价,我都惊了,这对吗?感觉二面完蛋